package biblioteca;

import javax.swing.JOptionPane;
  /**
   * 
   * @author YERLIN
   * 
   * String opc(s)   ---> las opc guardan las opciones de menu de cada seccion, usando pattern y matcher se evalua si ingresan letras
   * int opcion(s)   ---> las opciones transforman (String - int) y guardan (int) los valores de los ingresos desde opc 
   * boolean disponible ---> Indica si la cotizacion fue positiva, es decir valor producto era <= presupuesto disponible y existia proveedor 
   *                         o bien negativa.
   * boolean multaCursada ---> Indica si el usuario esta bloqueado o no. 
   * boolean disponible2  ---> indica si se encontraron los ejemplares
   * double valormulta ---> Guarda el valor de la multa que se retorna de calcularValorMulta 
   * int diasSuspension ---> guarda los dias que lleva el usuario sera suspendido, se obtiene a traves de dias retraso por 2 ya que se suspende al usuario el doble de las veces que retraso
   * int diasTranscurrido ---> guarda los valores de los dias que han transcurrido desde la aplicacion de la sancion
   * int nroBloqueado ---> guarda el valor que retorna cursar multa y es el numero del usuario bloqueado
   * reserva ---> instancia la clase Reserva
   * audio ---> instancia la clase EjemplarAudivisual 
   * escrito ---> instancia la clase EjemplarAudivisual 
   * bibliotecario--> instancia la clase Bibliotecario
   * agregarPersona--< instancia la clase Persona
   * int co ---> guarda el numero del socio del cual se decea conocer disponibilidad , transforma a int la varable codigo
   * String codigo---> guarda en String el numero del socio del cual se decea conocer disponibilidad
   * 
   */
public class MainBiblioteca {
	public static void main(String[] args) {

		
		String opc = "";
		String opc2 = "";
		String opc1 = "";
		String opc4 = "";
		int opcion = 0;
		int opcion2 = 0;
		int opcion4 = 0;
		int opcion1 = 0;
		

		int nroBloqueado = 0;
		boolean multaCursada = false;
		double valormulta = 0.0;
		int diasSuspension = 0;
		int diasTranscurrido = 0;

		Reserva reserva= new Reserva();
		EjemplarAudioVisual audio = new EjemplarAudioVisual();
		EjemplarEscrito escrito = new EjemplarEscrito();
		Bibliotecario bibliotecario = new Bibliotecario();
		Prestamo prestamo= new Prestamo();
		Usuario usuario=new Usuario();

		boolean disponible = true;
		int diasRetraso = 0;
		boolean multaCancelada = true;
		boolean proveedorDisponible = false;
		boolean ver = true;boolean ver1 = true;boolean ver2 = true;boolean ver4 = true;

		do {

			do {

				opc1 = JOptionPane
						.showInputDialog("Bienvenido : \nSECCION QUE DESEA VISITAR\n\n 1: Registrarse \n 2: Ingresar  \n 3: Salir ");
				 ver = bibliotecario.validarDato(opc1);
				if (ver==false){
					opcion1=Integer.parseInt(opc1);
				}else{
					ver=true;
				}
				

			} while (ver!=false && (opcion1 != 1 || opcion1 != 2 || opcion1!=3));

			if (opcion1 == 1) {
				 boolean regist=true; int opcion11=0;
				do {

					String opc11 = JOptionPane.showInputDialog("Bienvenido : \nSECCION QUE DESEA REALIZAR\n\n 1:Agregar nuevo usuario :  \n 2: Eliminar usuario  \n 3: Actualizar registros \n 4: Ver registros ");
					 regist= bibliotecario.validarDato(opc11);
					if (regist==false){
						opcion11=Integer.parseInt(opc11);
					}else{
						regist=true;
					}
					

			} while (regist!=false && (opcion11 != 1 || opcion11 != 2 || opcion11!=3 || opcion11!=4));
				
				if (opcion11==1){

					String nombre= JOptionPane.showInputDialog("Ingrese nombre: ");
					String domicilio= JOptionPane.showInputDialog("Ingrese domicilio: ");
					String numeros= "";
					String tipopersona= JOptionPane.showInputDialog("Ingrese tipo de persona : ");
					String correo= JOptionPane.showInputDialog("Ingrese correo: ");
					int numero=0;
	              
	              boolean verd=true;
	              do {

	            	   numeros= JOptionPane.showInputDialog("Ingrese numero usuario: ");
	  				 verd = bibliotecario.validarDato(numeros);
	  				if (verd==false){
	  					numero=Integer.parseInt(numeros);
	  				}else{
	  					verd=true;
	  				}
	  				

	  			} while (verd!=false);
	              
	              usuario.agregarUsuario(nombre, domicilio, numero, tipopersona, correo);
	              
	              
				}else if(opcion11==2){
					boolean op=true; int opcion12=0;
					  do {

		            	 String  st= JOptionPane.showInputDialog("Ingrese posicion del usuario a eliminar: ");
		  				 op = bibliotecario.validarDato(st);
		  				if (op==false){
		  					opcion12=Integer.parseInt(st);
		  				}else{
		  					op=true;
		  				}
		  			} while (op!=false);
					  
					  usuario.eliminarUsuario(opcion12);
				}else if(opcion11==3){
					
					
				}else if (opcion11==4){
					usuario.mostrarRegistro();
				}
				
				

			} else if (opcion1==2){
				Multa multa = new Multa();

				do {
					do {

						opc = JOptionPane.showInputDialog("Bienvenido : \nSECCION QUE DESEA VISITAR\n\n 1: Funcionario \n 2: Usuario \n 3: SALIR ");
						ver2 = bibliotecario.validarDato(opc);
						if(ver2==false){
                        	opcion=Integer.parseInt(opc);
                        	
                        }else{
                        	ver=true;
                        }
					} while (ver2!=false && (opcion != 1 || opcion != 2 || opcion != 3));

					if (opcion == 1) {

						do {
							do {

								opc4 = JOptionPane.showInputDialog("Bienvenido Funcionario : \n Accion que desea realizar\n\n 1:Agregar multa  "
												+ " \n 2: Verificar Estado Usuario \n 3: Agregar ejemplar Audiovisual  \n 4: Agregar prestamo \n5: Agregar Proveedor 6: Ver cantidad ejemplar disponible  \n 7: Volver ");
                                ver1=bibliotecario.validarDato(opc4);
                                if (ver1==false){
                                	opcion4 =Integer.parseInt(opc4);
                                }else{
                                	ver1=true;
                                }
							} while (ver1!=false && (opcion4 != 1 || opcion4 != 2	|| opcion4 != 3 || opcion4 != 4|| opcion4 != 5 || opcion4 != 6 || opcion4 != 7));

							if (opcion4 == 1) {
								String multada = JOptionPane.showInputDialog(" Ingrese nombre Socio  a multar ");

								nroBloqueado = multa.cursarMulta(multada);

								 boolean dias1=true;
								 
							do{
								String dias = JOptionPane.showInputDialog("Cuantos dias de retraso lleva" );
								dias1=bibliotecario.validarDato(dias);
								 if (dias1==false){
									 diasRetraso=Integer.parseInt(dias);
								 }else{
									 dias1=true;
								 }
							}while(dias1!=false);
						
							
							boolean diasTran=true;  
							
							do{
								String diasTrans = JOptionPane.showInputDialog("Cuantos dias lleva desde la aplicacion de la multa");
								diasTran=bibliotecario.validarDato(diasTrans);
								 if (diasTran==false){
									 diasTranscurrido=Integer.parseInt(diasTrans);
								 }else{
									 diasTran=true;
								 }
							}while(diasTran!=false);
					
								
								
							} else if (opcion4 == 2) {
								int multado = 0;

								
								do{
									String mul = JOptionPane.showInputDialog(" Ingrese numero Socio a consultar ");	
									ver4=bibliotecario.validarDato(mul);
									if(ver4==false){
										multado = Integer.parseInt(mul);
									}else{
									   ver4=true;
									}
								}while(ver!=false);
						
								
								if (multado == nroBloqueado) {
									JOptionPane.showMessageDialog(null,
											"------- USUARIO BLOQUEADO ------");
									multaCursada = true;
								} else {
									JOptionPane.showMessageDialog(null,
											"------- USUARIO DISPONIBLE------");
									multaCursada = false;
								}
							} else if (opcion4 == 3) {
								
							String ejemplar=JOptionPane.showInputDialog("Ingrese nombre del ejemplar");
							int numerocopias=0;
							boolean validar=true;
							do{
								String numer=JOptionPane.showInputDialog("Ingrese numero copias");
								validar=bibliotecario.validarDato(numer);
								if(validar==false){
									numerocopias = Integer.parseInt(numer);
								}else{
								   validar=true;
								}
							}while(validar!=false);
							
							boolean validar2=true;
							String idioma=JOptionPane.showInputDialog("Ingrese idioma");
							String fecha=JOptionPane.showInputDialog("Ingrese fecha publicacion");
							String formato=JOptionPane.showInputDialog("Ingrese formato");
							int duracion=0;
							
							
							
							do{
								String dura=JOptionPane.showInputDialog("Ingrese duracion");
								validar2=bibliotecario.validarDato(dura);
								if(validar2==false){
									duracion= Integer.parseInt(dura);
								}else{
								   validar2=true;
								}
							}while(validar2!=false);

							
							audio.agregarEjemplar(ejemplar, numerocopias, idioma, fecha, formato, duracion);
                           
					

							} else if (opcion4 == 4) {
								boolean vaprestamo=true;int codigoEjemplar=0;
								String nombreSocio=JOptionPane.showInputDialog("Ingrese nombre socio: ");
								String nombreEjem=JOptionPane.showInputDialog("Ingrese nombre ejemplar");
								do{
									String cejemplar=JOptionPane.showInputDialog("Ingrese codigo ejemplar: ");
									vaprestamo=bibliotecario.validarDato(cejemplar);
									if(vaprestamo==false){
										codigoEjemplar= Integer.parseInt(cejemplar);
									}else{
									   vaprestamo=true;
									}
								}while(vaprestamo!=false);
								
								
								String fechaPrestamo=JOptionPane.showInputDialog("Ingrese fecha prestamo: ");
								
								prestamo.agregarEjemplar(nombreSocio, nombreSocio, codigoEjemplar, fechaPrestamo);
								
								
							} else if (opcion4 == 5) {

								String nombre = JOptionPane.showInputDialog("INGRESE NOMBRE PROVEEDOR");

								
								boolean ver8=true;
								int codigoproveedor =0;
								do{
									String CP = JOptionPane.showInputDialog("INGRESE CODIGO DE PROVEEDOR");
									ver8= bibliotecario.validarDato(CP);
									if(ver8==false){
									codigoproveedor=Integer.parseInt(CP);
									}else{
										ver8=true;
									}
								}while(ver8!=false);

								

								boolean proveedorDisponible1 = bibliotecario.agregarProveedor(nombre, codigoproveedor);
								if (proveedorDisponible1 == true) {
									proveedorDisponible = true;
								} else {
									proveedorDisponible = false;
								}

							} else if (opcion4 == 6) {

								
                                boolean ver10=true;
								int cantidadRequerida = 0;
								
								do{
									String CD = JOptionPane.showInputDialog("Ingrese cantidad de ejemplares requeridos");
									ver10=bibliotecario.validarDato(CD);
									if(ver10==false){
										cantidadRequerida =Integer.parseInt(CD);
									}else{
										ver10=true;
									}
								}while (ver!=false);

								int cantDisponible = 100;

								if (cantDisponible < cantidadRequerida) {
									int opcion8 =0;
									boolean ve=true;
                                   do{
                                	   String opc8 = JOptionPane.showInputDialog("SE NECESITAN EJEMPLARES QUE DESEA HACER: \n 1:Cotizar\n 2: salir");
                                	   ve=bibliotecario.validarDato(opc8);
                                	   if(ve==false){
                                		   opcion8 = Integer.parseInt(opc8);
                                	   }else{
									         ve=true;
                                	   }
                                   }while(ve!= false && (opcion8!=1 && opcion8!=2));

									if (opcion8 == 1) {
										Compra compra = new Compra();
										double presupuesto = Double.parseDouble(JOptionPane.showInputDialog("Ingrese presupuesto disponible"));
										boolean Disponible = compra.cotizarEjemplar(15420.0,presupuesto,proveedorDisponible);

										if (Disponible == true) {
											int opcion9=0;boolean vert=true;
											
                                            do{
                                            	String opc9 = JOptionPane.showInputDialog(null,"El ejemplar se encuentra disponible : \n 1:Comprar \n 2: salir");
                                            	vert=bibliotecario.validarDato(opc9);
                                            	if(vert==false){
       											 opcion9 = Integer.parseInt(opc9);
                                            	}else{
                                            		
                                            	}
                                            }while(vert!=false && (opcion!=1 && opcion!=2 ));
											if (opcion9 == 1) {
												Disponible = true;
												compra.comprarEjemplar(Disponible);

											}
										} else {
											disponible = false;
											compra.comprarEjemplar(Disponible);
										}

									}

								}

							}
						} while (opcion4 != 7);
						
						
						
						
						
						
						
						
					} else {

						do {
						    boolean ver11=true;
							do {
								opc2 = JOptionPane.showInputDialog("Bienvenido Usuario : \nSECCION QUE DECEA VISITA\n \n1:Ver Estado  \n2:  ver Ejemplares \n 3:Buscar Ejemplar que decea pedir\n 4: Salir  ");
                                ver11=bibliotecario.validarDato(opc2);
								if(ver11==false){
									opcion2 = Integer.parseInt(opc2);
                                }else{
                                	ver11=true;
                                }
								

							} while ((ver11!=false)&&(opcion2 != 1 || opcion2 != 2|| opcion2 != 3 || opcion2 != 4));

							if (opcion2 == 1) {
								diasSuspension = diasRetraso * 2;

								if (multaCursada == true) {
									disponible = false;
									JOptionPane.showMessageDialog(null,"usted se encuentra multado ..... ");

									  if (diasTranscurrido > diasSuspension) {
										int opcion6 = 0;
                                         boolean conp=true;
										
                                        do{
                                        	String opc6 = JOptionPane.showInputDialog(null,"Desea conocer a cuanto asiende su multa\n 1: SI \n 2: NO");
                                        	conp=bibliotecario.validarDato(opc6);
                                        	if(conp==false){
                                        		opcion6 =Integer.parseInt(opc6);
                                        	}else{
                                        		conp=true;
                                        	}
										
                                        }while(conp!=false && (opcion6!=1 || opcion6!=2));
                                       
										if (opcion6 == 1) {
											valormulta = multa.calcularValorMulta(diasRetraso);
											JOptionPane.showMessageDialog(null,"El valor de su multa es: "+ valormulta);
											disponible = false;
											int opcion7 = 0;
											boolean ten=true;
                                            do{
                                            	String opc7 = JOptionPane.showInputDialog(null,"Desea cancelar su multa\n 1: SI \n 2: NO");
                                            	ten = bibliotecario.validarDato(opc7);
                                            	if(ten==false){
                                            		opcion7=Integer.parseInt(opc7);
                                            	}
											
                                            }while(ten!=false && (opcion7!=1 || opcion!=2));
                                            
										     if (opcion7 == 1) {
												double dineroCancelar = Integer.parseInt(JOptionPane.showInputDialog(null,"ingrese Suma dinero con la que decea pagar"));
												multaCancelada = multa.cancelarMulta(valormulta,dineroCancelar);
												if (multaCancelada == true) {
													JOptionPane.showMessageDialog(null,"Multa cancelada satisfactoriamente ");
													disponible = true;
												} else {
													JOptionPane.showMessageDialog(null,"Multa NO cancelada , LO INGRESADO NO SATISFACE LA DEUDA");
													disponible = true;
												}
											  }else{
												  disponible=false;
											  }
										}else{
												disponible=false;
										}
						                 } else {
										JOptionPane.showMessageDialog(null,"USTED AUN SE ENCUENTRA BLOQUEADO --- ESPERE A QUE SITUACION SE MODIFIQUE");
									        }

								  } else {
									disponible = true;
								   }

								}else if(opcion2 == 2) {

								int opcion3 = 0;
								String opc3 = "";boolean ter=true;
								do {

									opc3 = JOptionPane.showInputDialog("Tipo Ejemplar\n1: ver Audiovisual \n 2:ver Textos ");
                                    ter=bibliotecario.validarDato(opc3);
                                    if(ter==false){
                                    	opcion3 = Integer.parseInt(opc3);
                                    }else{
                                    	ter=true;
                                    }
								} while (ter!=false && (opcion3 != 1 || opcion3 != 2));
								if (opcion3 == 1) {
									audio.mostrarRegistro();

								} else {

									escrito.MostrarEjemplaresEscritos();
								}

							} else if (opcion2 == 3) {
								String codigo = "";
								int codi = 0;boolean mar=true;
                                do{
									codigo = JOptionPane.showInputDialog("Ingrese Codigo de lo que desea buscar");
									mar=bibliotecario.validarDato(codigo);
									if(mar==false){
										codi = Integer.parseInt(codigo);
									}else{
										mar=true;
									}
                                }while(mar!=false);

								if (audio.comprobarDisponibilidad(codi) == true || escrito.comprobarDisponibilidadEscritos(codi) == true) {
									JOptionPane.showMessageDialog(null,"El Ejemplar se encuentra Disponible");
									if (disponible == true) {
										int opcion5 = 0; boolean tr=true;
										do {

											String opc5 = JOptionPane.showInputDialog("Desea pedir el Ejemplar \n 1: si \n 2: no");
											tr= bibliotecario.validarDato(opc5);
											if(tr==false){
												opcion5 =Integer.parseInt(opc5);
											}else{
												tr=true;
											}
                                           
										} while (tr!=false && (opcion5 != 1 || opcion5 != 2 ));

										if (opcion5 == 1) {
											JOptionPane.showMessageDialog(null,"Se ha registrado su prestamoc con exito");
										}
									} else {
										JOptionPane.showMessageDialog(null,"USTED SE ENCUENTRA BLOQUEADO NO PUEDE PEDIR EJEMPLAR ...");
									}

								} else {

									JOptionPane.showMessageDialog(null,"El Ejemplar NO encuentra Disponible");

									int opcion10 = 0;boolean rs=true;
									do {

										String opc10 = JOptionPane.showInputDialog("Desea Reservar el Ejemplar \n 1: si \n 2: no");
										rs= bibliotecario.validarDato(opc10);
                                       if(rs==false){
                                    	   opcion10 =Integer.parseInt(opc10);
                                       }else{
                                    	   rs=true;
                                       }
									} while (rs!=false && (opcion10 != 1 || opcion10 != 2));

									
									
									if (opcion10 == 1) {
										
										if (disponible == true) {
											boolean sociov=true;
                                               String socio=JOptionPane.showInputDialog("Ingrese nombre socio: "); 
                                               String codig=""; int codigoSocio=0;
                                               do{
                                            	  codig =JOptionPane.showInputDialog("Ingrese codigo socio: ");
                                            	  sociov=bibliotecario.validarDato(codig);
                                            	   if (sociov==false){
                                            		   codigoSocio=Integer.parseInt(codig);
                                            	   }else{
                                            		   sociov=true;
                                            	   }
                                            	   
                                               }while (sociov!=false);
                                              
                                               String nombreEjemplar=JOptionPane.showInputDialog("Ingrese nombre ejemplar socio: ");
                                               String codigoEjemplar=JOptionPane.showInputDialog("Ingrese codigo ejemplar: ");
                                               String fechaReserva=JOptionPane.showInputDialog("Ingrese fecha reserva: ");
                                               
                                               reserva.agregarReserva(nombreEjemplar, codigoSocio, nombreEjemplar, codigoEjemplar, fechaReserva);
                                          
                                               
                                               
                                               
										} else {
											JOptionPane
													.showMessageDialog(null,
															"USTED SE ENCUENTRA BLOQUEADO NO PUEDE RESERVAR EJEMPLAR ...");
										}

									}
								}

							}

						

			    }while (opcion2!=4);
		 	}
		 } while (opcion != 3); 
		}

	} while (opcion1 != 3);

		JOptionPane.showMessageDialog(null, "--------Adios-----");
	}
	}

